/**
 * 1页面加载
 *    1从缓存中获取到页面数据 渲染到页面中(checked属性为true)
 * 2微信支付(企业账号)
 *    1企业账号的小程序后台中 必须 给开发者添加白名单
 *      1一个appid 可以同时绑定多个开发者
 *      2这些开发者可以共用appid 和 开发权限
 * 3支付按钮
 *    1先判断缓存中有没有token
 *    2没有跳转到授权页面 进行获取token信息
 *    3创建订单 获取订单编号
 *    4完成支付 查询订单
 *    5删除缓存中支付过的商品
 *    6重新将购物车数据存入data 和缓存中
 */

import { showModal, showToast, requestPayment } from "../../utils/asyncWx.js"
import { request } from "../../request/index.js"

Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    cart: [],
    totalPrice: 0,
    totalNum: 0
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    //1获取缓存的地址信息
    const address = wx.getStorageSync('address')
    //2获取缓存中的购物车数据
    let cart = wx.getStorageSync('cart') || []
    //3过滤后的购物车数组
    cart = cart.filter(v => v.checked)
    this.setData({ address })

    //重新计算总价格,总数量
    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v => {
      totalPrice += v.goods_price * v.num
      totalNum += v.num

    })
    //设置回data
    this.setData({
      cart,
      totalPrice,
      totalNum,
      address
    })

  },
  //点击支付功能
async handleOrderPay(){
    try {
      
      //1判断缓存有没有token
      const token = wx.getStorageSync('token')
      if(!token){
        wx.navigateTo({
          url: '/pages/auth/index'
        })
        return;
      }
      //====2创建订单
      //3准本请求头参数
      const header = {Authorization:token};
      //4准本请求体参数
      const order_price = this.data.totalPrice
      const consignee_addr = this.data.all
      const cart = this.data.cart
      let goods = []
      cart.forEach(v=>goods.push({
        goods_id:v.goods_id, 
        goods_number:v.num,
        goods_price:v.goods_price
      }))
      //5准备发请求 创建订单 获取订单编号
      const orderParams = {order_price,consignee_addr,goods}
      const res = await request({url:"/my/orders/create",method:"post",data:orderParams,header})
      // const {order_number} = res 后台传过来的订单id  这里自己创建
      const order_number = "1611993222hzh"
      //6准备发起预支付
      const res2 = await request({url:"/my/orders/req_unifiedorder",method:"post",header,data:{order_number}})
      // res2 会返回timeStamp nonceStr package signType paySign
      //以下代码需要封装到asyncWx.js
      // wx.requestPayment({
        //   timeStamp: '',
        //   nonceStr: '',
        //   package: '',
        //   signType: '',
        //   paySign: '',
        //   success: function(res){
          
          //   },
          //   fail: function(res){
            
            //   }
            // })
            //7发起微信支付
            const res3 = await requestPayment(res2.pay)
            //8查询后台 订单状态是否成功  res4为查询订单的结果
            const res4 = await request({url:"/my/orders/chkOrder",method:"post",header,data:{order_number}})
            //9弹窗提示
            await showToast({title:"支付成功"})
            //10删除支付成功的商品
            let newCart = wx.getStorageSync("cart")
            newCart = newCart.filter(v=>!v.checked)
            wx.setStorageSync("cart",newCart)
            //11支付成功跳转到订单页面
            wx.navigateTo({
              url:"/pages/order/index"
            })      
          } catch (error) {
            await showToast({title:"支付失败"})      
            console.log(error);
    }finally{
      //暂时无论如何都模拟支付成功
      let newCart = wx.getStorageSync("cart")
            newCart = newCart.filter(v=>!v.checked)
            wx.setStorageSync("cart",newCart)
      //跳到订单页面
      wx.navigateTo({
        url:"/pages/order/index"
      })  
    }
      

      
  
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})